﻿//Abstrakcyjna klasa ObiektSferyczny, reprezentuj¹ca cia³o niebieskie o kszta³cie kuli
// Zawiera pola reprezentuj¹ce siatkê kuli. 

#pragma once

#include "headers.h"



class ObiektSferyczny
{
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//														%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//							PROTECTED
//														%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
protected:
//#################################################################################################################
//                   uchwyt glownego urzadzenia
//#################################################################################################################
	//LPDIRECT3DDEVICE9 pDevice;					// potrzebny przy transformacjach i tworzeniu siatki

//#################################################################################################################
//                   Mesze
//#################################################################################################################
	LPD3DXMESH tempMesh;						// tymczasowa siatka kuli (tworzona w konstruktorze klasy ObiektSferyczny
	LPD3DXMESH Mesh;							// siatka wlasciwa - potrzebne sa dwie siatki zeby pokolorowac te siatke.
												// siatka Mesh wypelniana jest juz w klasie pochodnej
	LPD3DXMESH g_pMesh;							//siatka obiektu 
	D3DMATERIAL9* g_pMeshMaterials;				//material siatki 
	LPDIRECT3DTEXTURE9* g_pMeshTextures;		//tekstury siatki 
	DWORD g_dwNumMaterials;						//liczba tekstur siatki 

//#################################################################################################################
//                   bufor wierzchołków
//#################################################################################################################
	LPDIRECT3DVERTEXBUFFER9 pTempVertexBuffer;  // tymczasowy bufor wiercholków, równiez potrzebny w klasie pochodnej

//#################################################################################################################
//                   zmienne merytoryczne
//#################################################################################################################
	float fDistance;							// odleglosc kuli od srodka kuli wlasciciela 
	const int kFontSize;						// rozmiar czcionki
	char* nazwaPlanety;							// nazwa planety
	std::string nazwaPlanetyStr;				// ciekawe cos
	char* srednicaBiegunowa;					// srednica obiektu
	char* odlegloscOdSlonca;					// odleglosc od Slonca
	int vrcIleKlatekDoWyswietlenia;				// ilośc klatek przez ktore ma byc jeszcze wyswietlany opis planety


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//														%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//							PUBLIC
//														%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
public:
//#################################################################################################################
//                    konstruktor bezparametryczny - nie wykorzystywany
//#################################################################################################################
	ObiektSferyczny(void);

//#################################################################################################################
//                    destruktor
//#################################################################################################################
	virtual ~ObiektSferyczny(void);	

//#################################################################################################################
//                    konstruktor wieeeeloargumentowy - gesto wykorzystywany
//#################################################################################################################
	ObiektSferyczny(UINT Slices, UINT Stacks, float fDistance, 
					char* nazwaPlanety, char* srednicaBiegunowa, char* odlegloscOdSlonca);

//#################################################################################################################
//                    funkcja rysujaca
//#################################################################################################################
	void rysuj(ID3DXFont * gFont, D3DXVECTOR3 cameraPosition, D3DXVECTOR3 LookAtVector,  float* dist,  std::string* ktoraPlaneta);

//#################################################################################################################
//                     wirtualna metoda odpowiadaj¹ca za transformacje i zwracanie przekszta³conej siatki
//#################################################################################################################
	virtual  D3DXMATRIX przeksztalc(bool bOrbitOn, float fSpeedModifier, float fElpasedTime);	
};